package IO流.文件字节输出流_写字节出去;

// 目标: 掌握文件字节输出流FileOutStream的使用

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class Test {
    public static void main(String[] args) throws Exception {
        // 作用: 以内存为基准, 把内存中的数据以字节的形式写出到文件中去

        // 构造器:
        // public FileOutputStream(File file): 创建字节输出流管道与源文件接通

        // public FileOutputStream(String filepath): 创建字节输出流管道与源文件路径接通

        // public FileOutputStream(File file, boolean append): 创建字节输出流管道与源文件对象接通, 可追加数据

        // public FileOutStream(String filepath, boolean append): 创建字节输出流管道与源文件路径接通, 可追加数据


        //方法
        // public void write(int a): 写一个字节出去

        // public void write(byte[] buffer): 写一个字节数组出去

        // public void write(byte[] buffer, int pos, int len): 写一个字节数组的一部分出去

        // public void close() throws IOException: 关闭流


        // 1. 创建一个字节输出流管道与目标文件接通
        // 注意,文件字节输出流再输出时会自动创建文件, 故不需要先创建文件
        //不追加数据的管道
        //OutputStream os = new FileOutputStream("Senior\\src\\IO流\\文件字节输出流_写字节出去\\pta.txt");
        // 追加数据的管道
        OutputStream os = new FileOutputStream("Senior\\src\\IO流\\文件字节输出流_写字节出去\\pta.txt",true);
        // 注意:没追加数据管道的write()每次写数据时, 都会把之前写入的数据清空. 反之不会清空

        // 2. 开始写字节数据出去
        // a. 单个字节
        os.write(97);
        os.write('b');
        os.write(98);
        os.write('我'); //出现乱码, 因为该写动作只能写一个字节, 而汉字有三个字节, 故默认写汉字的第一个字节进去, 所以会乱码

        // b. 多个字节
        byte[] bytes = "我爱你中国".getBytes();
        os.write(bytes);

        // c. 部分字节
        os.write(bytes,3,6); // 这里把"爱你"写入文件, 因为汉字为三个字节, 所以是三到六

        os.close(); //关闭流

        // 拓展: 换行符
        // 转义字符 "\n" 为换行符, 但是这个可能在其他平台或者系统不支持, 故用"\r\n"这个所有平台都支持
        os.write("\r\n".getBytes());


    }
}
